/*
* Copyright (c) 2018 naehrwert
* Copyright (c) 2018 CTCaer
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
#define  __SYLIXOS_KERNEL
#include <SylixOS.h>

#include "util.h"
#include "../gfx/di.h"
#include "../power/max77620.h"
#include "../soc/i2c.h"
#include "../soc/pmc.h"
#include "../soc/t210.h"

u32 get_tmr_ms()
{
    ULONG ulUsecPerTick;
    ULONG ulMsecTotal;

    ulUsecPerTick = 1000000 / API_TimeGetFrequency();
    ulMsecTotal = API_TimeGet () * ulUsecPerTick / 1000;

    return (u32)ulMsecTotal;
}

void msleep(u32 ms)
{
    usleep(ms * 1000);
}

void exec_cfg(vu32 *base, cfg_op_t *ops, u32 num_ops)
{
	for(u32 i = 0; i < num_ops; i++)
		base[ops[i].off] = ops[i].val;
}

void panic(u32 val)
{
	// Set panic code.
	PMC(APBDEV_PMC_SCRATCH200) = val;
	//PMC(APBDEV_PMC_CRYPTO_OP) = PMC_CRYPTO_OP_SE_DISABLE;
	TMR(TIMER_WDT4_UNLOCK_PATTERN) = TIMER_MAGIC_PTRN;
	TMR(TIMER_TMR9_TMR_PTV) = TIMER_EN | TIMER_PER_EN;
	TMR(TIMER_WDT4_CONFIG)  = TIMER_SRC(9) | TIMER_PER(1) | TIMER_PMCRESET_EN;
	TMR(TIMER_WDT4_COMMAND) = TIMER_START_CNT;

	while (true)
		usleep(1);
}
